#include "LinearMath/btVector3.h"
#ifdef __cplusplus
extern "C" {
#endif
btVector4* bullet_NewbtVector4(){
	btVector4* wrap_out = new btVector4();
	return wrap_out;
}

btVector4* bullet_NewbtVector41(double* _x,double* _y,double* _z,double* _w){
	btScalar const& c_arg__x=(btScalar const&)(*_x);
	btScalar const& c_arg__y=(btScalar const&)(*_y);
	btScalar const& c_arg__z=(btScalar const&)(*_z);
	btScalar const& c_arg__w=(btScalar const&)(*_w);
	btVector4* wrap_out = new btVector4(c_arg__x,c_arg__y,c_arg__z,c_arg__w);
	return wrap_out;
}

btVector4* bullet_btVector4_absolute4(btVector4* c_this){
	btVector4 c_out = c_this->absolute4();
	btVector4* wrap_out = new btVector4(c_out);
	return wrap_out;
}

int bullet_btVector4_closestAxis4(btVector4* c_this){
	int c_out = c_this->closestAxis4();
	int wrap_out = (c_out);
	return wrap_out;
}

double bullet_btVector4_getW(btVector4* c_this){
	btScalar c_out = c_this->getW();
	double wrap_out = (c_out);
	return wrap_out;
}

int bullet_btVector4_maxAxis4(btVector4* c_this){
	int c_out = c_this->maxAxis4();
	int wrap_out = (c_out);
	return wrap_out;
}

int bullet_btVector4_minAxis4(btVector4* c_this){
	int c_out = c_this->minAxis4();
	int wrap_out = (c_out);
	return wrap_out;
}

void bullet_btVector4_setValue(btVector4* c_this,double* _x,double* _y,double* _z,double* _w){
	btScalar const& c_arg__x=(btScalar const&)(*_x);
	btScalar const& c_arg__y=(btScalar const&)(*_y);
	btScalar const& c_arg__z=(btScalar const&)(*_z);
	btScalar const& c_arg__w=(btScalar const&)(*_w);
	c_this->setValue(c_arg__x,c_arg__y,c_arg__z,c_arg__w);
}

btVector3FloatData* bullet_NewbtVector3FloatData(){
	btVector3FloatData* wrap_out = new btVector3FloatData();
	return wrap_out;
}

float** bullet_btVector3FloatData_GetFieldOfM_floats(btVector3FloatData* c_this){
	return (float**)(&c_this->m_floats);
}

btVector3DoubleData* bullet_NewbtVector3DoubleData(){
	btVector3DoubleData* wrap_out = new btVector3DoubleData();
	return wrap_out;
}

double** bullet_btVector3DoubleData_GetFieldOfM_floats(btVector3DoubleData* c_this){
	return (double**)(&c_this->m_floats);
}

btVector3* bullet_NewbtVector3(){
	btVector3* wrap_out = new btVector3();
	return wrap_out;
}

btVector3* bullet_NewbtVector31(double* _x,double* _y,double* _z){
	btScalar const& c_arg__x=(btScalar const&)(*_x);
	btScalar const& c_arg__y=(btScalar const&)(*_y);
	btScalar const& c_arg__z=(btScalar const&)(*_z);
	btVector3* wrap_out = new btVector3(c_arg__x,c_arg__y,c_arg__z);
	return wrap_out;
}

btVector3* bullet_btVector3_absolute(btVector3* c_this){
	btVector3 c_out = c_this->absolute();
	btVector3* wrap_out = new btVector3(c_out);
	return wrap_out;
}

double bullet_btVector3_angle(btVector3* c_this,btVector3* v){
	btVector3 const& c_arg_v=(btVector3 const&)(*v);
	btScalar c_out = c_this->angle(c_arg_v);
	double wrap_out = (c_out);
	return wrap_out;
}

int bullet_btVector3_closestAxis(btVector3* c_this){
	int c_out = c_this->closestAxis();
	int wrap_out = (c_out);
	return wrap_out;
}

btVector3* bullet_btVector3_cross(btVector3* c_this,btVector3* v){
	btVector3 const& c_arg_v=(btVector3 const&)(*v);
	btVector3 c_out = c_this->cross(c_arg_v);
	btVector3* wrap_out = new btVector3(c_out);
	return wrap_out;
}

void bullet_btVector3_deSerialize(btVector3* c_this,btVector3DoubleData* dataIn){
	btVector3DoubleData const& c_arg_dataIn=(btVector3DoubleData const&)(*dataIn);
	c_this->deSerialize(c_arg_dataIn);
}

void bullet_btVector3_deSerialize1(btVector3* c_this,btVector3FloatData* dataIn){
	btVector3FloatData const& c_arg_dataIn=(btVector3FloatData const&)(*dataIn);
	c_this->deSerialize(c_arg_dataIn);
}

void bullet_btVector3_deSerializeDouble(btVector3* c_this,btVector3DoubleData* dataIn){
	btVector3DoubleData const& c_arg_dataIn=(btVector3DoubleData const&)(*dataIn);
	c_this->deSerializeDouble(c_arg_dataIn);
}

void bullet_btVector3_deSerializeFloat(btVector3* c_this,btVector3FloatData* dataIn){
	btVector3FloatData const& c_arg_dataIn=(btVector3FloatData const&)(*dataIn);
	c_this->deSerializeFloat(c_arg_dataIn);
}

double bullet_btVector3_distance(btVector3* c_this,btVector3* v){
	btVector3 const& c_arg_v=(btVector3 const&)(*v);
	btScalar c_out = c_this->distance(c_arg_v);
	double wrap_out = (c_out);
	return wrap_out;
}

double bullet_btVector3_distance2(btVector3* c_this,btVector3* v){
	btVector3 const& c_arg_v=(btVector3 const&)(*v);
	btScalar c_out = c_this->distance2(c_arg_v);
	double wrap_out = (c_out);
	return wrap_out;
}

double bullet_btVector3_dot(btVector3* c_this,btVector3* v){
	btVector3 const& c_arg_v=(btVector3 const&)(*v);
	btScalar c_out = c_this->dot(c_arg_v);
	double wrap_out = (c_out);
	return wrap_out;
}

btVector3* bullet_btVector3_dot3(btVector3* c_this,btVector3* v0,btVector3* v1,btVector3* v2){
	btVector3 const& c_arg_v0=(btVector3 const&)(*v0);
	btVector3 const& c_arg_v1=(btVector3 const&)(*v1);
	btVector3 const& c_arg_v2=(btVector3 const&)(*v2);
	btVector3 c_out = c_this->dot3(c_arg_v0,c_arg_v1,c_arg_v2);
	btVector3* wrap_out = new btVector3(c_out);
	return wrap_out;
}

int bullet_btVector3_furthestAxis(btVector3* c_this){
	int c_out = c_this->furthestAxis();
	int wrap_out = (c_out);
	return wrap_out;
}

bool bullet_btVector3_fuzzyZero(btVector3* c_this){
	bool c_out = c_this->fuzzyZero();
	bool wrap_out = (c_out);
	return wrap_out;
}

double** bullet_btVector3_GetFieldOfM_floats(btVector3* c_this){
	return (double**)(&c_this->m_floats);
}

void bullet_btVector3_getSkewSymmetricMatrix(btVector3* c_this,btVector3* v0,btVector3* v1,btVector3* v2){
	btVector3 * c_arg_v0=(btVector3 *)(void*)(v0);
	btVector3 * c_arg_v1=(btVector3 *)(void*)(v1);
	btVector3 * c_arg_v2=(btVector3 *)(void*)(v2);
	c_this->getSkewSymmetricMatrix(c_arg_v0,c_arg_v1,c_arg_v2);
}

double* bullet_btVector3_getX(btVector3* c_this){
	btScalar const& c_out = c_this->getX();
	double* wrap_out = (double*)(&c_out);
	return wrap_out;
}

double* bullet_btVector3_getY(btVector3* c_this){
	btScalar const& c_out = c_this->getY();
	double* wrap_out = (double*)(&c_out);
	return wrap_out;
}

double* bullet_btVector3_getZ(btVector3* c_this){
	btScalar const& c_out = c_this->getZ();
	double* wrap_out = (double*)(&c_out);
	return wrap_out;
}

bool bullet_btVector3_isZero(btVector3* c_this){
	bool c_out = c_this->isZero();
	bool wrap_out = (c_out);
	return wrap_out;
}

double bullet_btVector3_length(btVector3* c_this){
	btScalar c_out = c_this->length();
	double wrap_out = (c_out);
	return wrap_out;
}

double bullet_btVector3_length2(btVector3* c_this){
	btScalar c_out = c_this->length2();
	double wrap_out = (c_out);
	return wrap_out;
}

btVector3* bullet_btVector3_lerp(btVector3* c_this,btVector3* v,double* t){
	btVector3 const& c_arg_v=(btVector3 const&)(*v);
	btScalar const& c_arg_t=(btScalar const&)(*t);
	btVector3 c_out = c_this->lerp(c_arg_v,c_arg_t);
	btVector3* wrap_out = new btVector3(c_out);
	return wrap_out;
}

int bullet_btVector3_maxAxis(btVector3* c_this){
	int c_out = c_this->maxAxis();
	int wrap_out = (c_out);
	return wrap_out;
}

int bullet_btVector3_maxDot(btVector3* c_this,btVector3* array,int array_count,double* dotOut){
	btVector3 const * c_arg_array=(btVector3 const *)(void*)(array);
	int c_arg_array_count=array_count;
	btScalar& c_arg_dotOut=(btScalar&)(*dotOut);
	int c_out = c_this->maxDot(c_arg_array,c_arg_array_count,c_arg_dotOut);
	int wrap_out = (c_out);
	return wrap_out;
}

int bullet_btVector3_minAxis(btVector3* c_this){
	int c_out = c_this->minAxis();
	int wrap_out = (c_out);
	return wrap_out;
}

int bullet_btVector3_minDot(btVector3* c_this,btVector3* array,int array_count,double* dotOut){
	btVector3 const * c_arg_array=(btVector3 const *)(void*)(array);
	int c_arg_array_count=array_count;
	btScalar& c_arg_dotOut=(btScalar&)(*dotOut);
	int c_out = c_this->minDot(c_arg_array,c_arg_array_count,c_arg_dotOut);
	int wrap_out = (c_out);
	return wrap_out;
}

double bullet_btVector3_norm(btVector3* c_this){
	btScalar c_out = c_this->norm();
	double wrap_out = (c_out);
	return wrap_out;
}

btVector3* bullet_btVector3_normalize(btVector3* c_this){
	btVector3& c_out = c_this->normalize();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

btVector3* bullet_btVector3_normalized(btVector3* c_this){
	btVector3 c_out = c_this->normalized();
	btVector3* wrap_out = new btVector3(c_out);
	return wrap_out;
}

btVector3* bullet_btVector3_rotate(btVector3* c_this,btVector3* wAxis,double angle){
	btVector3 const& c_arg_wAxis=(btVector3 const&)(*wAxis);
	btScalar const c_arg_angle=angle;
	btVector3 c_out = c_this->rotate(c_arg_wAxis,c_arg_angle);
	btVector3* wrap_out = new btVector3(c_out);
	return wrap_out;
}

double bullet_btVector3_safeNorm(btVector3* c_this){
	btScalar c_out = c_this->safeNorm();
	double wrap_out = (c_out);
	return wrap_out;
}

btVector3* bullet_btVector3_safeNormalize(btVector3* c_this){
	btVector3& c_out = c_this->safeNormalize();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

void bullet_btVector3_serialize(btVector3* c_this,btVector3DoubleData* dataOut){
	btVector3DoubleData& c_arg_dataOut=(btVector3DoubleData&)(*dataOut);
	c_this->serialize(c_arg_dataOut);
}

void bullet_btVector3_serializeDouble(btVector3* c_this,btVector3DoubleData* dataOut){
	btVector3DoubleData& c_arg_dataOut=(btVector3DoubleData&)(*dataOut);
	c_this->serializeDouble(c_arg_dataOut);
}

void bullet_btVector3_serializeFloat(btVector3* c_this,btVector3FloatData* dataOut){
	btVector3FloatData& c_arg_dataOut=(btVector3FloatData&)(*dataOut);
	c_this->serializeFloat(c_arg_dataOut);
}

void bullet_btVector3_setInterpolate3(btVector3* c_this,btVector3* v0,btVector3* v1,double rt){
	btVector3 const& c_arg_v0=(btVector3 const&)(*v0);
	btVector3 const& c_arg_v1=(btVector3 const&)(*v1);
	btScalar c_arg_rt=rt;
	c_this->setInterpolate3(c_arg_v0,c_arg_v1,c_arg_rt);
}

void bullet_btVector3_setMax(btVector3* c_this,btVector3* other){
	btVector3 const& c_arg_other=(btVector3 const&)(*other);
	c_this->setMax(c_arg_other);
}

void bullet_btVector3_setMin(btVector3* c_this,btVector3* other){
	btVector3 const& c_arg_other=(btVector3 const&)(*other);
	c_this->setMin(c_arg_other);
}

void bullet_btVector3_setValue(btVector3* c_this,double* _x,double* _y,double* _z){
	btScalar const& c_arg__x=(btScalar const&)(*_x);
	btScalar const& c_arg__y=(btScalar const&)(*_y);
	btScalar const& c_arg__z=(btScalar const&)(*_z);
	c_this->setValue(c_arg__x,c_arg__y,c_arg__z);
}

void bullet_btVector3_setW(btVector3* c_this,double _w){
	btScalar c_arg__w=_w;
	c_this->setW(c_arg__w);
}

void bullet_btVector3_setX(btVector3* c_this,double _x){
	btScalar c_arg__x=_x;
	c_this->setX(c_arg__x);
}

void bullet_btVector3_setY(btVector3* c_this,double _y){
	btScalar c_arg__y=_y;
	c_this->setY(c_arg__y);
}

void bullet_btVector3_setZ(btVector3* c_this,double _z){
	btScalar c_arg__z=_z;
	c_this->setZ(c_arg__z);
}

void bullet_btVector3_setZero(btVector3* c_this){
	c_this->setZero();
}

double bullet_btVector3_triple(btVector3* c_this,btVector3* v1,btVector3* v2){
	btVector3 const& c_arg_v1=(btVector3 const&)(*v1);
	btVector3 const& c_arg_v2=(btVector3 const&)(*v2);
	btScalar c_out = c_this->triple(c_arg_v1,c_arg_v2);
	double wrap_out = (c_out);
	return wrap_out;
}

double* bullet_btVector3_w(btVector3* c_this){
	btScalar const& c_out = c_this->w();
	double* wrap_out = (double*)(&c_out);
	return wrap_out;
}

double* bullet_btVector3_x(btVector3* c_this){
	btScalar const& c_out = c_this->x();
	double* wrap_out = (double*)(&c_out);
	return wrap_out;
}

double* bullet_btVector3_y(btVector3* c_this){
	btScalar const& c_out = c_this->y();
	double* wrap_out = (double*)(&c_out);
	return wrap_out;
}

double* bullet_btVector3_z(btVector3* c_this){
	btScalar const& c_out = c_this->z();
	double* wrap_out = (double*)(&c_out);
	return wrap_out;
}

#ifdef __cplusplus
}
#endif
